#include<stdio.h>
#include<stdlib.h>
#include "boolean.h"
#include "ADT_DatabaseSosNet.h"
#include "MODUL_SocialNetwork.h"

void InputAdmin(ListMember * G)
// Digunakan untuk memproses input yang diberikan sebagai admin
{
	char input[100], dum[100];
	bool x = false;
	printf("> ");scanf("%s ", input);
	while (!IsStringEqual(input, "exit"))
	{
		if(IsStringEqual(input, "load"))
		{
			scanf("%s", dum);
			AdminLoad(G, dum);
		}
		else if(IsStringEqual(input, "reload"))
		{
			AdminReload(G);
		}
		else if(IsStringEqual(input, "user"))
		{
			scanf("%s", dum);
			address1 A = SearchByEmail(*G, dum);
			AdminChange(*G, A);
		}
		else if(IsStringEqual(input, "save"))
		{
			AdminSave(*G);
		}
		else if(IsStringEqual(input, "adduser"))
		{
			infotype I;
			char B[100];
			int a,b,c;
			
			scanf("%s ", B);
			SetEmail(&I, B);
			
			scanf("\"%[^'\"']%c", B, &dum);
			SetNama(&I, B);
			
			scanf("%d-%d-%d ", &a,&b,&c);
			SetTanggal(&(GetTanggal(I)), CreateTanggal(a,b,c));
			
			scanf("\"%[^'\"']%c ", B, &dum);
			SetKotaAsal(&I, B);
			
			scanf("\"%[^'\"']%c ", B, &dum);
			SetUNV(&I, B);
			
			scanf("\"%[^'\"']%c", B, &dum);
			SetSMU(&I, B);
			
			AdminAddUser(G, I);
		}
		else if(IsStringEqual(input, "modifyuser"))
		{
			char B[100];
			
			scanf("%s ", B);
			AdminModUser(G, B);
			/*
			address1 alamat = SearchByEmail(*G, B);
			if(alamat != Nil)
			{
				AdminModUser(G, )
				printf("\nPerubahan data pribadi %s sukses\n", B);
				PrintInfotype(Info(alamat));
			}
			else
			{
				printf("Tidak ditemukan email tersebut\n");
			}
			*/
		}
		else if(IsStringEqual(input, "deluser"))
		{
			char B[100];
			
			scanf("%s ", B);
			
			address1 alamat = SearchByEmail(*G, B);
			if(alamat != Nil)
			{
				DelP(G, InfoMember(alamat));
			}
			else
			{
				printf("Tidak ditemukan email tersebut\n");
			}
			
		}
		else if(IsStringEqual(input, "list"))
		{
			char B[100];
			scanf("%s", dum);
			if(!IsStringEqual(dum, "#"))
			{
				scanf("%s", B);
				AdminList(*G, GetKodeA(dum), GetKodeB(B));
			}
			else
				x = true;
		}
		if(x)
			x = false;
		else
			scanf("%s", dum);
		printf("> ");scanf("%s ", input);
	}
	AdminExit(*G);
}

void InputUser()
// Digunakan untuk memproses input yang diberikan sebagai user
{
	char input[100], dum[100];
	printf("%s >> ", GetEmail(InfoMember(currentUser)));scanf("%s ", input);
	while (!IsStringEqual(input, "close"))
	{
		if(IsStringEqual(input, "friend"))
		{
		}
		else if(IsStringEqual(input, "unfriend"))
		{
		}
		else if(IsStringEqual(input, "updatedata"))
		{
		}
		else if(IsStringEqual(input, "birthday"))
		{
		}
		else if(IsStringEqual(input, "same"))
		{
		}
		else if(IsStringEqual(input, "notfriendyet"))
		{
		}
		scanf("%s", dum);printf("%s >> ", GetEmail(InfoMember(currentUser)));scanf("%s ", input);
	}
	UserClose();
}

/*
void AdminLoad(ListMember * G, char X[100]);
// {I.S : Sembarang, namafile sudah terdefinisi}
// {F.S : namafile terset seperti input user, G telah menjadi seperti input file}
// Memakai ADT-MesinKata dan ADT-MesinKarakter
void AdminChange(ListMember G, address1 now);
// {I.S : State Admin}
// {F.S : State User, dengan nama user harus ada di dalam graf, set currentUser}
void AdminSave(ListMember G);
// {I.S : Graf telah terdefinisi}
// {F.S : Menyimpan semua data ke file namafile}
void AdminReload(ListMember * G)
// {I.S : Sembarang}
// {F.S : Graf telah menjadi seperti input file}
{
	AdminLoad(G, currentFILE);
}
void AdminAddUser(ListMember * G, infotype X);
// {I.S : Graf Terdefinisi}
// {F.S : MEnambah user baru secara terurut}
// {Jika alokasi memori untuk X gagal, memberikan pesan eror}
// {Proses : Menggunakan prosdur InsertVTerurut}
void AdminModUser(ListMember * G, char X[100]);
// {I.S : Graf Terdefinisi, X adalah email dari user yang akan dimodify}
// {F.S : Mengubah data user yang telah ada}
// {Proses : Menggunakan fungsi SearchByInfo}
void AdminList(ListMember G, int a, int b);
// {I.S : Graf Terdefinisi}
// {F.S : Mencetak ke layar Graf secara terurut}
// {Proses : Menggunakan fungsi PrintInfo}
// {a dari 1..6 menunjukkan adanya terurut berdasarkan atribut tertentu, jika 0 maka ditulis tanpa sesuai input}
// {b=1 menunjukkan ascending, sedangkan 0 adalah descending}
void AdminExit(ListMember G);
// {I.S : Graf Terdefinisi}
// {F.S : Keluar dari simulasi jejaring sosial}
// {Proses : Menanyakan apakah Graf akan disave?}

void UserListFriend();
// {I.S : Graf Terdefinisi}
// {F.S : Mencetak ke layar, list semua friend dari currentUser}
void UserFriend(char X[100]);
// {I.S : Graf Terdefinisi}
// {F.S : Menambahkan friend dari currentUser}
void UserUnfriend(char X[100]);
// {I.S : Graf Terdefinisi}
// {F.S : Mendelete friend dari currentUser, jika X bukan merupakan teman dari currentUser, maka ada warning}
void UserUpdate();
// {I.S : Graf Terdefinisi}
// {F.S : Update data dari currentUser}
void UserBirthday(Tanggal Today, int HariLagi);
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman dengan birthday dalam jangka x hari, dengan x input user. Secara default 7}
void UserSame(int a);
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman level 1, 2, 3 dengan kesamaan atribut dari currentUser}
void UserNotFriend();
// {I.S : Graf Terdefinisi}
// {F.S : Tercetak ke layar list teman level 2, 3 yang bukan list level 1}
void UserClose();
// {I.S : State User}
// {F.S : State Admin}
*/
